---
layout: landing
title: Automated browser testing for the modern web development stack
description: TestCafe is a simple and powerful framework for testing websites and apps. It allows you to easily create, maintain and execute automated web tests across browsers, operating systems and devices.
permalink: /
---
<main>
    <form id="main-form" action="#">
    <div class="banner">
        <div class="header">
        Automated browser testing<br/>for the modern web development stack
        </div>
        <div class="slogan">
        TestCafe is a pure node.js end-to-end solution for testing web apps. It takes care of all the stages: starting browsers, running tests, gathering test results and generating reports. TestCafe doesn’t need browser plugins - it works in all popular modern browsers out-of-the-box.
        </div>
        <div class="white-button-container">
        <a href="documentation/getting-started/" class="white-button">Get Started</a>
        </div>
        <div class="star-button">
            <a class="github-button" href="https://github.com/DevExpress/testcafe" data-style="mega" data-count-href="/DevExpress/testcafe/stargazers" data-count-api="/repos/DevExpress/testcafe#stargazers_count" data-count-aria-label="# stargazers on GitHub" aria-label="Star DevExpress/testcafe on GitHub"><span style="color:#ffffff">Star</span></a>
        </div>
    </div>
    <div class="main-content">
        <a class="anchor" name="features"></a>
        <div class="feature">
            <span class="name">
                Easy Install
            </span>
            <div class="description">
                <p>Everything is included in a single module installed with one command.</p>
                <div class="command">npm install -g testcafe</div>
                <p>No native parts to compile, no browsers plugins to install.</p>
            </div>
        </div>
        <div class="feature">
            <span class="name">
                Complete Test Harness
            </span>
            <div class="description">
                <p>TestCafe automatically starts browsers, runs tests and gathers results. You only type a single command to begin testing.</p>
                <div class="command">testcafe chrome,firefox tests/</div>
                <p>When testing is finished, TestCafe aggregates test results from different browsers and outputs them into one comprehensive report.</p>
            </div>
        </div>
        <div class="feature">
            <span class="name">
                Write Test Code Using ES2016
            </span>
            <div class="description">
                <p>You can write TestCafe tests in ES2016 using the latest JavaScript features like <code>async/await</code>.</p>
                <p><a href="documentation/test-api">Test API</a> consists of over two dozen methods that can emulate all actions one could possibly do with a webpage. Chained syntax allows for code that is easy to write and read.</p>
                <pre><code>import { expect } from 'chai';

fixture `Example page`
    .page `https://devexpress.github.io/testcafe/example`;

test('Emulate user actions and perform a verification', async t => {
    await t
        .setNativeDialogHandler(() => true)
        .click('#populate')
        .click('#submit-button');

    const location = await t.eval(() => window.location);

    expect(location.pathname).eql('/testcafe/example/thank-you.html');
});</code></pre>
                <p>Additionally, TestCafe automatically generates source maps for easy debugging. To debug your test code, start a debugging session in an IDE that supports source maps.</p>
            </div>
        </div>
       <div class="feature">
            <span class="name">
                Direct Access to Page Elements
            </span>
            <div class="description">
                <p>TestCafe allows you to access webpage elements using standard CSS selectors or <a href="documentation/test-api/selecting-page-elements/selectors.html">custom selectors</a> that run client JavaScript code. You can call a custom selector as a regular function within your test. It will execute your code on the client and pass the returned value back to the test. This allows you to determine the state of each element on the tested page or select a proper element to perform an action on.</p>

                <pre><code>import { expect } from 'chai';
import { Selector } from 'testcafe';

const elementWithId = Selector(id => document.querySelector(`#${id}`));

fixture `Example page`
    .page `https://devexpress.github.io/testcafe/example`;

test('Type the developer name, obtain the header text and check it', async t => {
    await t
        .typeText('#developer-name', 'John Smith')
        .click('#submit-button');

    const headerText = await elementWithId('article-header').innerText;

    expect(headerText).to.equal('Thank you, John!');
});</code></pre>
            </div>
        </div>
        <div class="feature">
            <span class="name">
                No Extra Coding
            </span>
            <div class="description">
                <p>Write tests without boilerplate code.</p>
                <ul>
                    <li>TestCafe automatically waits for page loads and XHRs to complete, as well as for DOM elements to become visible. You do not need to write custom code for that.</li>
                    <li>Test runs are isolated, which means that they do not share cookies, local or session storages. There is nothing to clean up between test runs.</li>
                </ul>
            </div>
       </div>
        <div class="feature">
            <span class="name">
                Descriptive Reports
            </span>
            <div class="description">
                <p>TestCafe automatically generates full-detailed reports that provide a test run summary and comprehensive information about errors. Automatic page screenshots, fancy call sites and call stacks free of TestCafe internals allow you to easily detect error causes.</p>
                <p>Use one of <a href="documentation/using-testcafe/common-concepts/reporters.html">built-in reporters</a> to output test results or <a href="documentation/extending-testcafe/reporter-plugin/">create your own one</a> to produce custom reports.</p>
            </div>
            <div class="gallery-container">
            <div id="gallery"></div>
            </div>
        </div>
        <div class="feature">
            <span class="name">
                Straightforward Continuous Integration
            </span>
            <div class="description">
                <p>TestCafe is easy to set up on popular Continuous Integration platforms as it allows you to test against various browsers: local, remote or cloud (e.g. <a href="https://saucelabs.com/">Sauce Labs</a>).
                You can also create a custom <a href="documentation/extending-testcafe/browser-provider-plugin">browser provider</a> to add support for a browser or a cloud platform of your choice.</p>
            </div>
        </div>
        <div class="feature">
            <span class="name">
                More to Come…
            </span>
            <div class="description">
                <p>We plan to introduce other outstanding features so that you can test apps with even more efficiency. Meanwhile, you can help us improve TestCafe by voting for features on our <a href="https://github.com/DevExpress/testcafe/milestone/10">road map </a> or sharing your own ideas and code in our <a href="https://github.com/DevExpress/testcafe">GitHub repository</a>.</p>
            </div>
        </div>
        <div class="blue-button-container">
        <a href="documentation/getting-started/" class="blue-button">Get Started</a>
        </div>
    </div>
    </form>
</main>
